/* 变量声明 */
let a: number = 10;
let b: string = '1334';
const c: object = {};
const arr: Array<number> = [1, 2, 3, 4, 5];

/*固定的返回值类型  固定参数类型*/
function func(params: Array<number>): string {
  return ''
}

func([1, 2, 3]);


/*接口 api
* 声明和类比较类似
*
* 1. 当做类型约束来用
* 2. 当底层抽象来用  依赖倒置原则
*
* */
interface Person {
  label: string;
  name: string;
  age: number;
}

function getPerson(params: Person) {

}

getPerson({
  label: '小张',
  name: '小小张',
  age: 30
})

/* 声明一个抽象  类如果实现接口里要把接口里面的方法重写
*
*  类 实现 接口  implements   接口只负责声明方法 不用实现
*
*  类 继承 类   extends
*
*  继承和实现可以放在一起
*
*  抽象类和接口 抽象类只能继承一次  接口可以实现多个
*  */
interface Animal {
  getName(): string;
}

/*abstract : 抽象类 类继承抽象类的时候 必须实现抽象方法*/
abstract class MyAnimal {
  /*抽象方法*/
  abstract getAbsName(): string
}
interface  MyAnimal1 {
  getAbs1Name(): string
}


class Dog extends MyAnimal implements Animal,MyAnimal1 {
  getName(): string {
    return "";
  }

  getAbsName(): string {
    return "";
  }

  getAbs1Name(): string {
    return "";
  }
}





